<?php
   class Payment extends MY_Controller{
	   public function __construct(){
		   parent::__construct();
		   $this->load->helper("url");
		   $this->load->model("model_pay");
		   $this->load->library('session');
		   $this->load->library("pager");
		   $this->load->library("email");
		  // $this->load->library("my_email");
	   }
	   public function index(){
		   $data['error'] = "";
		   $data['title'] = "Xác nhận đặt phòng";
		   $data['config']	= $this->config();
		   $data['gold']		= $this->goldtime();
		   if($this->input->post()){
			   $date = $this->input->post("startdate");
			   $startdate = substr($date,0,2);
			   $startmon  = substr($date,3,5);
			   $type	 = $this->input->post("room_type");
			   $room_now = $this->input->post("room_now");
			   $day_num  = $this->input->post("day_num");
			   $room_number = $this->input->post("room");
			   $total_price = $this->input->post("price");
			   $adults		=	$this->input->post("adults");
			   $child05		= $this->input->post("children");
			   $child51		= $this->input->post("childr");
			   $price_type  = $this->input->post("price_type");
			   $tick_type   = $this->input->post("day_tick");
			   $price52 = $child51*1250000;
		   	   if($type == 1){
				   if($adults == $room_number){
						$childr_free = $room_number*2;
						if($child51	<= $childr_free){
							$childr_price = 0;
						}else{
							$childr_price = ($child51-2)*1250000;	
						}
					}else{
						if($adults % 2 == 0 && $adults > ($room_number*2 - 2)){
							$childr_price = $child51*1250000;
						}else{
							$childr_free = ($room_number*1) + 1;
							if(($child51 < ($room_number*1)) && $adults >= ($room_number*2 - 2)){
								 $childr_price = 0;
							}else{
								 $childr_price = ($child51-2)*1250000;	
							}
						}
					}
					if($room_number == 1){
						$price_total = $price_type + (2250000 + 500000) + $childr_price;
					}else{
						$price_tol = ($room_number-1)*4500000;
						$price_total = $price_tol + $price_type + 2250000 + 500000 +  $childr_price;
					//alert("price_tol : "+$price_tol+" childr_price : "+$childr_price);
					}
			   }else{
				   if($adults == $room_number){
						$childr_free = $room_number*2;
						if($child51 <= $childr_free){
						  	$childr_price = 0;
						}else{
						    $childr_price = ($child51-2)*1250000;	
						}
					}else{
						if($adults % 2 == 0 && $adults > ($room_number*2 - 2)){
							$childr_price = $child51*1250000;
						}else{
							$childr_free = ($room_number*1) + 1;
							if(($child51 < ($room_number*1)) && $adults >= ($room_number*2 - 2)){
							   $childr_price = 0;
						    }else{
						        $childr_price = ($child51-2)*1250000;	
						    }
						}
					}
					if($room_number == 1){
						$price_total = $price_type + $childr_price;
					}else{
						$price_tol = $room_number*$price_type;
						$price_total = $price_tol +  $childr_price;
					}
			   }
			   if($price_total != $total_price){
				   redirect(base_url()."home/payment/failed");
			   }else{
				   $data['date'] = $date;
				   $data['startdate'] = $startdate;
				   $data['startmon'] = $startmon;
				   $data['type'] = $type;
				   $data['room_now'] = $room_now;
				   $data['room_tick'] = $day_num;
				   $data['room_number'] = $room_number;
				   $data['total_price'] = $price_total;
				   $data['adults_num'] = $adults;
				   $data['child05'] = $child05;
				   $data['child51'] = $child51;
				   $data['tick_type'] = $tick_type;
			   	   $this->load->view("payment/layout",$data);
			   }
		   }else{
			  	redirect(base_url());
		   	   //$this->load->view("payment/layout",$data);
		   }
	   }
	   public function select(){
		   $data['error'] = "";
		   $data['title'] = "Chọn phương thức thanh toán";
		   $data['config']	= $this->config();
		   
		   if($this->session->userdata("code_check")){
			   if($this->session->userdata("code_pri") == $this->input->post("order_price")){
			   		die("<h3>Bạn chỉ được đăng ký 1 lần!</h3><p><a href='".base_url()."'>Về trang chủ</a></p>");
			   }
		   }
		   if(!$this->input->post()){
			   redirect(base_url()."home/payment/failed");
		   }else{
			   $random = "PARADISE".$this->ran().date('His').rand();
			   $order_trans = date('YmdHis').rand();
			   $db = array(
			   		"order_name"		=> $this->fillter($this->input->post("order_name")),
					"order_code"		=> $random,
					"order_idtrans"		=> $order_trans,
					"order_email"		=> $this->fillter($this->input->post("order_email")),
					"order_phone"		=> $this->fillter($this->input->post("order_phone")),
					"order_add"			=> $this->fillter($this->input->post("order_add")),
					"order_cmnd"		=> $this->fillter($this->input->post("order_cmnd")),
			   		"order_type"		=> $this->fillter($this->input->post("order_type")),
			   		"order_startdate" 	=> substr($this->input->post("order_date"),0,2),
					"order_startmon"	=> substr($this->input->post("order_date"),3,5),
					"order_roomnow"		=> $this->input->post("order_roomnow"),
					"order_roomnumber"	=> $this->input->post("order_roomnumber"),
					"order_price"		=> $this->input->post("order_price"),
					"order_adults"		=> $this->input->post("order_adults"),
					"order_child05"		=> $this->input->post("order_child05"),
					"order_child51"		=> $this->input->post("order_child51"),
					"order_tick"		=> $this->input->post("order_ticktype"),
					"order_date"		=> date("d/m/Y - H:i:s"),
			  	);
				$session = array(
					"order"		=> $random,
					"type"		=> $db['order_type'],
					"startdate" => $db['order_startdate'],
					"startmont" => $db['order_startmon'],
					"room_now"	=> $db['order_roomnow'],
					"room_num" 	=> $db['order_roomnumber'],
					"room_tick"	=> $this->input->post("order_tick"),
					"room_ticktype" => $db['order_tick']
				);
				$this->session->set_userdata($db);
				$this->session->set_userdata($session);
				//$this->model_pay->add($db);
				$this->load->view("payment/select/layout",$data);
		   }
	   }
	   public function process(){
		   $type = $this->input->post("type");
		   if($type == NULL || !$this->session->userdata("order_name")){
			   redirect(base_url()."home/payment/failed");
			   die();
		   }
		   if($this->session->userdata("order_tick") <= 3){
			   $code = array(
			   		"code_check" => $this->ran(),
					"code_pri" => $this->session->userdata("order_price")
				);
			   $this->session->set_userdata($code);
		   }
		   $db = array(
		   		"order_name"		=> $this->session->userdata("order_name"),
				"order_code"		=> $this->session->userdata("order_code"),
				"order_idtrans"		=> $this->session->userdata("order_idtrans"),
				"order_email"		=> $this->session->userdata("order_email"),
				"order_phone"		=> $this->session->userdata("order_phone"),
				"order_add"			=> $this->session->userdata("order_add"),
				"order_cmnd"		=> $this->session->userdata("order_cmnd"),
			   	"order_type"		=> $this->session->userdata("order_type"),
			   	"order_startdate" 	=> $this->session->userdata("order_startdate"),
				"order_startmon"	=> $this->session->userdata("order_startmon"),
				"order_roomnow"		=> $this->session->userdata("order_roomnow"),
				"order_roomnumber"	=> $this->session->userdata("order_roomnumber"),
				"order_price"		=> $this->session->userdata("order_price"),
				"order_adults"		=> $this->session->userdata("order_adults"),
				"order_child05"		=> $this->session->userdata("order_child05"),
				"order_child51"		=> $this->session->userdata("order_child51"),
				"order_tick"		=> $this->session->userdata("order_tick"),
				"order_ip"			=> $_SERVER ['REMOTE_ADDR'],
				"order_date"		=> $this->session->userdata("order_date"),
				"order_pay_type"	=> $type
		   );
		   
		   $onepay = array(
					"virtualPaymentClientURL" => "https://onepay.vn/onecomm-pay/vpc.op",
					"Title" => "VPC 3-Party",
					"vpc_AccessCode" => "T8KJIAP0",
					"vpc_Amount"	=> ($db['order_price']*100),
					//"vpc_Amount"	=> 500000,
					"vpc_Command"	=> "pay",
					"vpc_Currency"	=> "VND",
					"vpc_Locale"	=> "vn",
					"vpc_MerchTxnRef"	=> $db['order_idtrans'],
					"vpc_Merchant"	=> "PARADISE",
					"vpc_OrderInfo"	=> $db['order_code'],
					"vpc_ReturnURL"	=> base_url()."home/pay_result/index",
					"vpc_TicketNo"	=> $_SERVER ['REMOTE_ADDR'],
					"vpc_Version"	=> "2"
				);
			$onepay_w = array(
					"virtualPaymentClientURL" => "https://onepay.vn/vpcpay/vpcpay.op",
					"Title" => "VPC 3-Party",
					"vpc_AccessCode" => "904E354D",
					"vpc_Amount"	=> ($db['order_price']*100),
					//"vpc_Amount"	=> 500000,
					"vpc_Command"	=> "pay",
					"vpc_Locale"	=> "vn",
					"vpc_MerchTxnRef"	=> $db['order_idtrans'],
					"vpc_Merchant"	=> "PARADISEVND",
					"vpc_OrderInfo"	=> $db['order_code'],
					"AVS_Street01"  => "",
					"AVS_City"		=> "",
					"AVS_StateProv" => "",
					"AVS_Country"	=> "",
					"vpc_ReturnURL"	=> base_url()."home/pay_result/pay_w",
					"vpc_TicketNo"	=> $_SERVER ['REMOTE_ADDR'],
					"vpc_Version"	=> "2"
				);
				if($db['order_pay_type'] == 1 || $db['order_pay_type'] == 4){
					$thisa = "Thanh toán Onepay";
				}elseif($db['order_pay_type'] == 2){
					$thisa = "Thanh toán chuyển khoản";
				}else{
					$thisa = "Thanh toán tại Paradise";
				}
				$message  = "Thông tin đặt phòng của ".$db['order_name']." \r\n";
				$message .= "Tài khách hàng : ".$db['order_name']." \r\n";
				$message .= "Số điện thoại : ".$db['order_phone']." \r\n";
				$message .= "Số CMND : ".$db['order_cmnd']." \r\n";
				$message .= "Địa chỉ email : ".$db['order_email']." \r\n";
				$message .= "Địa chỉ : ".$db['order_add']." : \r\n";
				$message .= "Mã đơn hàng : ".$db['order_code']." \r\n";
				$message .= "Số phòng đặt : ".$db['order_roomnumber']." \r\n";
				$message .= "Ngày đi  : ".$db['order_startdate']."/".$db['order_startmon']." \r\n";
				$message .= "Số người lớn : ".$db['order_adults']." \r\n";
				$message .= "Số trẻ em từ 0-5 tuổi : ".$db['order_child05']." \r\n";
				$message .= "Số trẻ em từ 5-12 tuổi : ".$db['order_child51']." \r\n";
				$message .= "Tổng số tiền : ".number_format($db['order_price'])." VND \r\n";
				$message .= "Hình thức thanh toán : ".$thisa."\r\n";
				$config['protocol']    = 'smtp';
	            $config['smtp_host']    = 'ssl://smtp.gmail.com';
	            $config['smtp_port']    = '465';
	            $config['smtp_timeout'] = '7';
	            $config['smtp_user']    = 'haanhdon@gmail.com'; // địa chỉ gmail
	            $config['smtp_pass']    = '0974128483'; // pass gmail
	            $config['charset']    = 'utf-8';
	            $config['newline']    = "\r\n";
	            $config['mailtype'] = 'html'; // or html
	            $config['validation'] = TRUE; // bool whether to validate email or not      
	            $this->load->library("email",$config);
	            $this->email->from("khuyenmai@paradisecruises.vn","Paradise Cruises");
	            $this->email->to("philongparadise@gmail.com"); 
	            $this->email->subject($db['order_name']." - ".date('d-m-Y')." - Đặt phòng Paradise Cruises");
	            $this->email->message($message);
	            $this->email->send();
				$this->model_pay->add($db);
				if($type == 1){ // Thanh toán Onepay nội địa
					$url = $this->onepay($onepay);
			    	redirect($url);
					die();
			    }elseif($type == 4){ // Thanh toán onepay quốc tế 
				  	$url = $this->onepay_w($onepay_w);
			    	redirect($url);
					die();
				}elseif($type == 2){ // Thanh toán chuyển khoản
					redirect(base_url()."home/payment/finish/2#bookingtour");
				}else{// Thanh toán tại văn phòng
					redirect(base_url()."home/payment/finish/3#bookingtour");
				}
	   }
	   public function onepay($data){
			// Khóa bí mật - được cấp bởi OnePAY
			$SECURE_SECRET = "9AFE3C689FACA24B2D1CFCC49823E2BB";
			
			// add the start of the vpcURL querystring parameters
			// *****************************Lấy giá trị url cổng thanh toán*****************************
			$vpcURL = $data["virtualPaymentClientURL"] . "?";
			
			// Remove the Virtual Payment Client URL from the parameter hash as we 
			// do not want to send these fields to the Virtual Payment Client.
			// bỏ giá trị url và nút submit ra khỏi mảng dữ liệu
			unset($data["virtualPaymentClientURL"]); 
			unset($data["SubButL"]);
			
			//$stringHashData = $SECURE_SECRET; *****************************Khởi tạo chuỗi dữ liệu mã hóa trống*****************************
			$stringHashData = "";
			// sắp xếp dữ liệu theo thứ tự a-z trước khi nối lại
			// arrange array data a-z before make a hash
			ksort ($data);
			// set a parameter to show the first pair in the URL
			// đặt tham số đếm = 0
			$appendAmp = 0;
			
			foreach($data as $key => $value) {
			
				// create the md5 input and URL leaving out any fields that have no value
				// tạo chuỗi đầu dữ liệu những tham số có dữ liệu
				if (strlen($value) > 0) {
					// this ensures the first paramter of the URL is preceded by the '?' char
					if ($appendAmp == 0) {
						$vpcURL .= urlencode($key) . '=' . urlencode($value);
						$appendAmp = 1;
					} else {
						$vpcURL .= '&' . urlencode($key) . "=" . urlencode($value);
					}
					//$stringHashData .= $value; *****************************sử dụng cả tên và giá trị tham số để mã hóa*****************************
					if ((strlen($value) > 0) && ((substr($key, 0,4)=="vpc_") || (substr($key,0,5) =="user_"))) {
						$stringHashData .= $key . "=" . $value . "&";
					}
				}
			}
			//*****************************xóa ký tự & ở thừa ở cuối chuỗi dữ liệu mã hóa*****************************
			$stringHashData = rtrim($stringHashData, "&");
			// Create the secure hash and append it to the Virtual Payment Client Data if
			// the merchant secret has been provided.
			// thêm giá trị chuỗi mã hóa dữ liệu được tạo ra ở trên vào cuối url
			if (strlen($SECURE_SECRET) > 0) {
				//$vpcURL .= "&vpc_SecureHash=" . strtoupper(md5($stringHashData));
				// *****************************Thay hàm mã hóa dữ liệu*****************************
				$vpcURL .= "&vpc_SecureHash=" . strtoupper(hash_hmac('SHA256', $stringHashData, pack('H*',$SECURE_SECRET)));
			}
			
			// FINISH TRANSACTION - Redirect the customers using the Digital Order
			// ===================================================================
			// chuyển trình duyệt sang cổng thanh toán theo URL được tạo ra
			//echo $vpcURL;
			//die();
			return $vpcURL;
	   }
	   public function onepay_w($data){
			// $SECURE_SECRET = "secure-hash-secret";
			$SECURE_SECRET = "B8F8577C2148D594BC2BA1C0F7768051";
			
			// add the start of the vpcURL querystring parameters
			$vpcURL = $data["virtualPaymentClientURL"] . "?";
			
			// Remove the Virtual Payment Client URL from the parameter hash as we 
			// do not want to send these fields to the Virtual Payment Client.
			unset($data["virtualPaymentClientURL"]); 
			
			// The URL link for the receipt to do another transaction.
			// Note: This is ONLY used for this example and is not required for 
			// production code. You would hard code your own URL into your application.
			
			// Get and URL Encode the AgainLink. Add the AgainLink to the array
			// Shows how a user field (such as application SessionIDs) could be added
			$data['AgainLink']=urlencode($_SERVER['HTTP_REFERER']);
			//$_POST['AgainLink']=urlencode($_SERVER['HTTP_REFERER']);
			// Create the request to the Virtual Payment Client which is a URL encoded GET
			// request. Since we are looping through all the data we may as well sort it in
			// case we want to create a secure hash and add it to the VPC data if the
			// merchant secret has been provided.
			//$md5HashData = $SECURE_SECRET; Khởi tạo chuỗi dữ liệu mã hóa trống
			$md5HashData = "";
			
			ksort ($data);
			
			// set a parameter to show the first pair in the URL
			$appendAmp = 0;
			
			foreach($data as $key => $value) {
			
			    // create the md5 input and URL leaving out any fields that have no value
			    if (strlen($value) > 0) {
			        
			        // this ensures the first paramter of the URL is preceded by the '?' char
			        if ($appendAmp == 0) {
			            $vpcURL .= urlencode($key) . '=' . urlencode($value);
			            $appendAmp = 1;
			        } else {
			            $vpcURL .= '&' . urlencode($key) . "=" . urlencode($value);
			        }
			        //$md5HashData .= $value; sử dụng cả tên và giá trị tham số để mã hóa
			        if ((strlen($value) > 0) && ((substr($key, 0,4)=="vpc_") || (substr($key,0,5) =="user_"))) {
					    $md5HashData .= $key . "=" . $value . "&";
					}
			    }
			}
			//xóa ký tự & ở thừa ở cuối chuỗi dữ liệu mã hóa
			$md5HashData = rtrim($md5HashData, "&");
			// Create the secure hash and append it to the Virtual Payment Client Data if
			// the merchant secret has been provided.
			if (strlen($SECURE_SECRET) > 0) {
			    //$vpcURL .= "&vpc_SecureHash=" . strtoupper(md5($md5HashData));
			    // Thay hàm mã hóa dữ liệu
			    $vpcURL .= "&vpc_SecureHash=" . strtoupper(hash_hmac('SHA256', $md5HashData, pack('H*',$SECURE_SECRET)));
			}
			
			// FINISH TRANSACTION - Redirect the customers using the Digital Order
			// ===================================================================
			return $vpcURL;
	   }
	   public function failed(){
		    $data['title'] = "Failed booking";
			$data['config'] 		= $this->config();
			$data['input'] = "Đã xảy ra lỗi,xin vui lòng thao tác lại!";
			$this->load->view("payment/failed/layout",$data);
	   }
	   public function finish(){
		   if(!$this->session->userdata('order_price')){
			   redirect(base_url());
		   }
		    $type = $this->uri->segment(4);
			if($type == 2){ // Thanh toán chuyển khoản
				$data['status'] = "<h3 style='margin-bottom:10px;'>THANH TOÁN CHUYỂN KHOẢN</h3>
					<p style='margin-bottom:10px;width:500px;font-weight:bold'>Khi quý khách chuyển khoản, xin vui lòng ghi rõ là : 'Thanh toán cho đặt phòng khách (Họ tên đầy đủ ) đi tàu ngày (ngày / tháng / năm) '</p>
					 <p style='color:green;margin-bottom:10px;width:500px'>Thông tin đặt phòng của bạn đã được ghi nhận,chúng tôi sẽ nhanh chóng liên hệ với bạn,cảm ơn bạn đã sử dụng dịch vụ của chúng tôi!</p>
					 <p style='color:red;width:500px'><i style='font-size:11px'>Lưu ý : Quý khách vui lòng chuyển khoản trong vòng 3h sau khi đặt phòng, nếu quá 48h chúng tôi không nhận được thông tin chuyển khoản của bạn thì đơn đặt hàng của bạn sẽ tự động bị huỷ!</i></p>
					 <p class='pfinish' style='font-weight:bold'>Thông tin tài khoản : </p>
					 <p class='pfinish'>Vietcombank chi nhánh Hạ Long, Quảng Ninh</p>
					 <p class='pfinish'>Số tài khoản : 0521000468086</p>
					 <p class='pfinish'>Công Ty Cổ Phần Du Thuyền Năm Sao Tuần Châu</p>
					 <p class='pfinish'>Mã số thuế : 5700639584</p>
					 <p class='pfinish' style='color:red;font-weight:bold;margin:7px 0px'><span style='color:#000'>Số tiền cần thanh toán </span> : ".number_format($this->session->userdata('order_price'))." VND</p>
					 ";
			}elseif($type == 3){ // Thanh toán tại Paradise Cruises
				$data['status'] = "<h3 style='margin-bottom:10px;'>THANH TOÁN TẠI PARADISE CRUISES</h3>
					 <p class='pfinish' style='color:green'>Quý khách vui lòng thanh toán bằng tiền mặt tại văn phòng đại diện của Paradise Cruises <span style='color:red'>(sau 3 giờ kể từ lúc đặt phòng)</span> tại Hà Nội hoặc thành phố Hồ Chí Minh trong giờ hành chính từ 8h sáng đến 5 giờ chiều các ngày từ thứ 2 đến thứ 6 hoặc 8h sáng đến 12h trưa ngày thứ 7 theo địa chỉ sau đây</p>
					 <p style='font-weight:bold;margin:10px 0px;'>Địa chỉ văn phòng Hà Nội :</p>
					 <p class='pfinish'>Phòng 8 & 9A</p>
					 <p class='pfinish'>Tầng 3, Tòa nhà International Centre, số 17 phố Ngô Quyền, Quận Hoàn Kiếm, Hà Nội</p>
					 <p class='pfinish'>Điện thoại: 04 6263 1833</p>
					 <p class='pfinish'>Fax: 04 6256 3399</p>
					 <p class='pfinish'>Email: info@paradisecruises.vn</p>
					 <p style='font-weight:bold;margin:10px 0px;'>Địa chỉ văn phòng Hà Nội :</p>
					 <p class='pfinish'>Số 6, Thái Văn Lung, Quận 1, Hồ Chí Minh</p>
					 <p class='pfinish'>Điện thoại: 08 8629 13131</p>
					 <p class='pfinish'>Fax: 08 8629 13130</p>
					 <p class='pfinish'>Email: saleshcmc@paradisecruises.vn</p>
					 ";
			}else{ //  Không xác định
				$data['status'] = "";
			}
		    $data['title'] 	= "Trạng thái giao dịch";
			$data['config'] = $this->config();
			$this->load->view("payment/finish/layout",$data);
	   }
	   public function ran(){
			$input = array("a","b","c","d","e","f","g","h","j","k","l","m","z","x","y","q");
			$rand_keys = array_rand($input, 3);
			return strtoupper($input[$rand_keys[0]].$input[$rand_keys[1]].$input[$rand_keys[2]]);
	   }
   }